/*
 * Copyright 2008 Carnegie Mellon University
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, 
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

function getSelectedText() {
  var w=window,d=w.document,s="";
  if (w.getSelection) { // FF
    s = w.getSelection();
    if (s=="") { return ""; }
    var range = getRangeObject(s);
    return range.toString();
  } else if (d.getSelection) { //??
    s = d.getSelection();
    var range = getRangeObject(s);
    return range.toString();
  } else if (d.selection) { // IE or Opera
    s = d.selection.createRange().text;
    return s;
  }
  return "";
}

function getSelectedRange() {
  var range;
  var w=window,d=w.document,s="";
  if (w.getSelection) { // FF
    s = w.getSelection();
    if (s=="") { return ""; }
    range = getRangeObject(s);
  } else if (d.getSelection) { //??
    s = d.getSelection();
    range = getRangeObject(s);
  } else if (d.selection) { // IE or Opera
    s = d.selection.createRange().text;
    //FIXME: create a range somehow!
  }
  return range;
}

function getRangeObject(selectionObject) {
  if (selectionObject.getRangeAt) {
    return selectionObject.getRangeAt(0);
  } else { // Safari!
    var range = document.createRange();
    range.setStart(selectionObject.anchorNode,selectionObject.anchorOffset);
    range.setEnd(selectionObject.focusNode,selectionObject.focusOffset);
    return range;
  }
}
